package com.mdl.springmvc.ioStream.io;

import com.mdl.springmvc.ioStream.po.Student;

import java.io.*;
import java.util.ArrayList;

/**
 * @Desc
 * 将存有多个自定义对象的集合序列化操作，保存到list.txt文件中。
 * 反序列化list.txt ，并遍历集合，打印对象信息。
 *
 * 把若干学生对象 ，保存到集合中。
 * 把集合序列化。
 * 反序列化读取时，只需要读取一次，转换为集合类型。
 * 遍历集合，可以打印所有的学生信息
 * @Author madengling
 * @Time 2021/1/8 16:35
 */
public class ObjectStreamTest09 {
    private static final String PATH = "G:\\dhcc\\idea\\MavenProject\\src\\main\\webapp\\files\\e\\";

    public static void main(String[] args) {
        // 创建 学生对象
        Student student = new Student("老王", "laow");
        Student student2 = new Student("老张", "laoz");
        Student student3 = new Student("老李", "laol");

        ArrayList<Student> arrayList = new ArrayList<>();
        arrayList.add(student);
        arrayList.add(student2);
        arrayList.add(student3);
        // 序列化操作
        serializ(arrayList);

        // 反序列化
        ObjectInputStream ois  = null;
        ArrayList<Student> list  = null;
        try {
            ois = new ObjectInputStream(new FileInputStream(PATH+"list.txt"));
            // 读取对象,强转为ArrayList类型
            list  = (ArrayList<Student>)ois.readObject();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if(ois!=null){
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        for (int i = 0; i < list.size(); i++ ){
            Student s = list.get(i);
            System.out.println(s.getName()+"--"+ s.getPwd());
        }
    }

    private static void serializ(ArrayList<Student> arrayList) {
        ObjectOutputStream oos = null;
        try {
            // 创建 序列化流
            oos = new ObjectOutputStream(new FileOutputStream(PATH+"list.txt"));
            // 写出对象
            oos.writeObject(arrayList);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            try {
                if(oos!=null){
                    oos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
